<template>
  <div class="wrap">
    <div>
      <div>详细地址:{{ addressKeyWord }}</div>
      <div>经纬度:{{ lnglat }}</div>
      <div>备注地点名:{{ locationName }}</div>
    </div>
    <div id="container"></div>
    <a-input
      style="width: 199px"
      v-model="addressKeyWord"
      id="pickerInput"
      placeholder="请输入关键字"
    />
  </div>
</template>
<script>
export default {
  data () {
    return {
      lnglat: [116.397428, 39.90923],
      addressKeyWord: "",
      locationName: ''
    }
  },
  mounted () {
    this.handleInitMap()
  },
  methods: {
    handleInitMap () {
      this.map = new AMap.Map('container', {
        resizeEnable: true, //是否监控地图容器尺寸变化
        zoom: 14, //初始化地图层级
        center: this.lnglat//初始化地图中心点
      })
      this.handleAddMarker()
      this.map.on('click', (ev) => {
        // 触发事件的地理坐标，AMap.LngLat 类型
        var lnglat = ev.lnglat
        console.log(ev, lnglat)
        this.lnglat = [lnglat.lng, lnglat.lat]
        this.map.clearMap()
        this.handleAddMarker()
        this.map.setCenter(this.lnglat)
        // 将经纬度坐标转化为详细地址
        AMap.plugin('AMap.Geocoder', () => {
          var geocoder = new AMap.Geocoder({
            extensions: 'all'
            // city 指定进行编码查询的城市，支持传入城市名、adcode 和 citycode
          })

          var lnglat1 = [lnglat.lng, lnglat.lat]

          geocoder.getAddress(lnglat1, (status, result) => {
            if (status === 'complete' && result.info === 'OK') {
              // result为对应的地理位置详细信息
              console.log(result, '详细地址')
              this.addressKeyWord = result.regeocode.formattedAddress
              this.locationName = result.regeocode.pois[0].name
            }
          })
        })
      })
      //加载BasicControl，loadUI的路径参数为模块名中 'ui/' 之后的部分
      AMapUI.loadUI(['control/BasicControl'], (BasicControl) => {
        //缩放控件
        this.map.addControl(new BasicControl.Zoom({
          position: 'rb', //left top，左上角
          showZoomNum: false //显示zoom值
        }))
      })
      //加载PoiPicker，loadUI的路径参数为模块名中 'ui/' 之后的部分
      AMapUI.loadUI(['misc/PoiPicker'], (PoiPicker) => {
        var poiPicker = new PoiPicker({
          input: 'pickerInput' //输入框id
        })
        //监听poi选中信息
        poiPicker.on('poiPicked', (poiResult) => {
          //用户选中的poi点信息
          console.log(poiResult, "poiResult")
          let lnglat = poiResult.item.location
          this.addressKeyWord = poiResult.item.name
          this.lnglat = [lnglat.lng, lnglat.lat]
          this.map.clearMap()
          this.handleAddMarker()
          this.map.setCenter(this.lnglat)
        })
      })
    },
    handleAddMarker () {
      // 构造点标记
      const marker = new AMap.Marker({
        icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
        position: this.lnglat
      })
      // 构造矢量圆形
      const circle = new AMap.Circle({
        center: new AMap.LngLat(this.lnglat[0], this.lnglat[1]), // 圆心位置
        radius: 1000,  //半径
        strokeColor: "#1890ff",  //线颜色
        strokeOpacity: 1,  //线透明度
        strokeWeight: 3,  //线粗细度
        fillColor: "#1890ff",  //填充颜色
        fillOpacity: 0.35 //填充透明度
      })

      // 将以上覆盖物添加到地图上
      // 单独将点标记添加到地图上
      this.map.add(marker)
      // add方法可以传入一个覆盖物数组，将点标记和矢量圆同时添加到地图上
      this.map.add([marker, circle])
    }
  },
};
</script>
<style lang="scss" scoped>
#container {
  width: 100%;
  height: 500px;
}
.wrap {
  position: relative;
  #pickerInput {
    position: absolute;
    right: 0;
    top: 50px;
    z-index: 99999;
  }
}
</style>
